package com.itbaizhan.rocketmqproducer.producer;

import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.apache.rocketmq.remoting.exception.RemotingException;

import java.io.UnsupportedEncodingException;

//发送延迟消息  电商平台   客户下单后，系统要求在一定时间内支付，这需要用延迟消息
// 客户下单后，系统会发送一条延迟消息，这消息不会立该收到，而是要等待一定时间，
// 消费者才会收到这消息，收到消息后可以进行删除订单或者修改订单
public class MyDelayMsgProducer {
    public static void main(String[] args) throws MQClientException, UnsupportedEncodingException, RemotingException, InterruptedException, MQBrokerException {
        //创建生产者
        DefaultMQProducer producer = new DefaultMQProducer("producer_grp_01");
        //设置nameserver地址
        producer.setNamesrvAddr("192.168.66.100:9876");
        producer.start();

        Message message = null;
        for (int i = 0; i < 20; i++) {
            //创建消息
             message = new Message("topic_springboot_02",("hello delayMessage..."+i).getBytes(RemotingHelper.DEFAULT_CHARSET));
            //设置延迟消息   // 设置延迟时间级别0,18,0表示不延迟，1代表1秒，18表示延迟2h，大于18的都是2h
            message.setDelayTimeLevel(i);
             //发送消息
            producer.send(message);
        }
        producer.shutdown();
    }
}
